package stormapplied.flashsale;
import backtype.storm.generated.StormTopology;
import backtype.storm.topology.TopologyBuilder;
import stormapplied.flashsale.topology.*;
public class FlashSaleTopologyBuilder {
private static final String CUSTOMER_RETRIEVAL_SPOUT = "customer-retrieval";
private static final String FIND_RECOMMENDED_SALES_FAST = "find-recommended-sales-fast";
private static final String FIND_RECOMMENDED_SALES_SLOW = "find-recommended-sales-slow";
private static final String LOOKUP_SALES_DETAILS = "lookup-sales-details";
private static final String SAVE_RECOMMENDED_SALES = "save-recommended-sales";
public static StormTopology build() {
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout(CUSTOMER_RETRIEVAL_SPOUT, new CustomerRetrievalSpout())
.setMaxSpoutPending(250);
builder
.setBolt(FIND_RECOMMENDED_SALES_FAST, new FindRecommendedSales(), 16)
.addConfiguration("timeout", 150)
.setNumTasks(16)
.shuffleGrouping(CUSTOMER_RETRIEVAL_SPOUT);
builder
.setBolt(FIND_RECOMMENDED_SALES_SLOW, new FindRecommendedSales(), 16)
.addConfiguration("timeout", 1500)
.setNumTasks(16)
.shuffleGrouping(FIND_RECOMMENDED_SALES_FAST,
FindRecommendedSales.RETRY_STREAM)
.shuffleGrouping(FIND_RECOMMENDED_SALES_SLOW,
FindRecommendedSales.RETRY_STREAM);
builder.setBolt(LOOKUP_SALES_DETAILS, new LookupSalesDetails(), 16)
.setNumTasks(16)
.shuffleGrouping(FIND_RECOMMENDED_SALES_FAST,
FindRecommendedSales.SUCCESS_STREAM)
.shuffleGrouping(FIND_RECOMMENDED_SALES_SLOW,
FindRecommendedSales.SUCCESS_STREAM);
builder.setBolt(SAVE_RECOMMENDED_SALES, new SaveRecommendedSales(), 4)
.setNumTasks(4)
.shuffleGrouping(LOOKUP_SALES_DETAILS);
return builder.createTopology();
}
}